package com.wang.lottery.domain.support.ids.policy;

import com.wang.lottery.domain.support.ids.IIdGenerator;
import org.springframework.stereotype.Component;

import java.util.Calendar;
import java.util.Random;

/**
 * @author wjh
 * @create 2023-11-05 17:35
 * 短码生成策略，仅支持很小的调用量，用于生成活动配置类编号，保证全局唯一
 */
@Component("shortCode")
public class ShortCode implements IIdGenerator {
    
    @Override
    public long nextId() {
        /**
         * Calendar翻译叫日历，很明显，可以根据这个类直接拿到一些日期相关的信息
         * Calendar.YEAR    年份
         * Calendar.WEEK_OF_YEAR    今年第几个星期
         * Calendar.DAY_OF_WEEK     这个星期的星期几
         * Calendar.HOUR_OF_DAY     今天的第几小时
         */
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int week = calendar.get(Calendar.WEEK_OF_YEAR);
        int day = calendar.get(Calendar.DAY_OF_WEEK);
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        // 打乱排序：2020年为准 + 小时 + 周期 + 日 + 三位随机数
        StringBuilder idStr = new StringBuilder();
        idStr.append(year - 2020)
                .append(hour)
                //%02d不满两位用0补齐
                .append(String.format("%02d",week))
                .append(day)
                .append(String.format("%03d",new Random().nextInt(1000)));
        return Long.parseLong(idStr.toString());
    }
}
